{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Can wine type help determine the quality score?\n",
    "\n",
    "## Wine Data\n",
    "Data from http://archive.ics.uci.edu/ml/datasets/Wine+Quality\n",
    "\n",
    "### Citations\n",
    "P. Cortez, A. Cerdeira, F. Almeida, T. Matos and J. Reis. \n",
    "Modeling wine preferences by data mining from physicochemical properties.\n",
    "In Decision Support Systems, Elsevier, 47(4):547-553. ISSN: 0167-9236.\n",
    "\n",
    "Available at:\n",
    "- [@Elsevier](http://dx.doi.org/10.1016/j.dss.2009.05.016)\n",
    "- [Pre-press (pdf)](http://www3.dsi.uminho.pt/pcortez/winequality09.pdf)\n",
    "- [bib](http://www3.dsi.uminho.pt/pcortez/dss09.bib)\n",
    "\n",
    "Dua, D. and Karra Taniskidou, E. (2017). UCI Machine Learning Repository [http://archive.ics.uci.edu/ml]. Irvine, CA: University of California, School of Information and Computer Science.\n",
    "## Setup"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "\n",
    "red_wine = pd.read_csv('../../ch_10/data/winequality-red.csv')\n",
    "white_wine = pd.read_csv('../../ch_10/data/winequality-white.csv', sep=';')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## EDA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>fixed acidity</th>\n",
       "      <th>volatile acidity</th>\n",
       "      <th>citric acid</th>\n",
       "      <th>residual sugar</th>\n",
       "      <th>chlorides</th>\n",
       "      <th>free sulfur dioxide</th>\n",
       "      <th>total sulfur dioxide</th>\n",
       "      <th>density</th>\n",
       "      <th>pH</th>\n",
       "      <th>sulphates</th>\n",
       "      <th>alcohol</th>\n",
       "      <th>quality</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7.0</td>\n",
       "      <td>0.27</td>\n",
       "      <td>0.36</td>\n",
       "      <td>20.7</td>\n",
       "      <td>0.045</td>\n",
       "      <td>45.0</td>\n",
       "      <td>170.0</td>\n",
       "      <td>1.0010</td>\n",
       "      <td>3.00</td>\n",
       "      <td>0.45</td>\n",
       "      <td>8.8</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>6.3</td>\n",
       "      <td>0.30</td>\n",
       "      <td>0.34</td>\n",
       "      <td>1.6</td>\n",
       "      <td>0.049</td>\n",
       "      <td>14.0</td>\n",
       "      <td>132.0</td>\n",
       "      <td>0.9940</td>\n",
       "      <td>3.30</td>\n",
       "      <td>0.49</td>\n",
       "      <td>9.5</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8.1</td>\n",
       "      <td>0.28</td>\n",
       "      <td>0.40</td>\n",
       "      <td>6.9</td>\n",
       "      <td>0.050</td>\n",
       "      <td>30.0</td>\n",
       "      <td>97.0</td>\n",
       "      <td>0.9951</td>\n",
       "      <td>3.26</td>\n",
       "      <td>0.44</td>\n",
       "      <td>10.1</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>7.2</td>\n",
       "      <td>0.23</td>\n",
       "      <td>0.32</td>\n",
       "      <td>8.5</td>\n",
       "      <td>0.058</td>\n",
       "      <td>47.0</td>\n",
       "      <td>186.0</td>\n",
       "      <td>0.9956</td>\n",
       "      <td>3.19</td>\n",
       "      <td>0.40</td>\n",
       "      <td>9.9</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>7.2</td>\n",
       "      <td>0.23</td>\n",
       "      <td>0.32</td>\n",
       "      <td>8.5</td>\n",
       "      <td>0.058</td>\n",
       "      <td>47.0</td>\n",
       "      <td>186.0</td>\n",
       "      <td>0.9956</td>\n",
       "      <td>3.19</td>\n",
       "      <td>0.40</td>\n",
       "      <td>9.9</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   fixed acidity  volatile acidity  citric acid  residual sugar  chlorides  \\\n",
       "0            7.0              0.27         0.36            20.7      0.045   \n",
       "1            6.3              0.30         0.34             1.6      0.049   \n",
       "2            8.1              0.28         0.40             6.9      0.050   \n",
       "3            7.2              0.23         0.32             8.5      0.058   \n",
       "4            7.2              0.23         0.32             8.5      0.058   \n",
       "\n",
       "   free sulfur dioxide  total sulfur dioxide  density    pH  sulphates  \\\n",
       "0                 45.0                 170.0   1.0010  3.00       0.45   \n",
       "1                 14.0                 132.0   0.9940  3.30       0.49   \n",
       "2                 30.0                  97.0   0.9951  3.26       0.44   \n",
       "3                 47.0                 186.0   0.9956  3.19       0.40   \n",
       "4                 47.0                 186.0   0.9956  3.19       0.40   \n",
       "\n",
       "   alcohol  quality  \n",
       "0      8.8        6  \n",
       "1      9.5        6  \n",
       "2     10.1        6  \n",
       "3      9.9        6  \n",
       "4      9.9        6  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "white_wine.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>fixed acidity</th>\n",
       "      <th>volatile acidity</th>\n",
       "      <th>citric acid</th>\n",
       "      <th>residual sugar</th>\n",
       "      <th>chlorides</th>\n",
       "      <th>free sulfur dioxide</th>\n",
       "      <th>total sulfur dioxide</th>\n",
       "      <th>density</th>\n",
       "      <th>pH</th>\n",
       "      <th>sulphates</th>\n",
       "      <th>alcohol</th>\n",
       "      <th>quality</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7.4</td>\n",
       "      <td>0.70</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.9</td>\n",
       "      <td>0.076</td>\n",
       "      <td>11.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>0.9978</td>\n",
       "      <td>3.51</td>\n",
       "      <td>0.56</td>\n",
       "      <td>9.4</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7.8</td>\n",
       "      <td>0.88</td>\n",
       "      <td>0.00</td>\n",
       "      <td>2.6</td>\n",
       "      <td>0.098</td>\n",
       "      <td>25.0</td>\n",
       "      <td>67.0</td>\n",
       "      <td>0.9968</td>\n",
       "      <td>3.20</td>\n",
       "      <td>0.68</td>\n",
       "      <td>9.8</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>7.8</td>\n",
       "      <td>0.76</td>\n",
       "      <td>0.04</td>\n",
       "      <td>2.3</td>\n",
       "      <td>0.092</td>\n",
       "      <td>15.0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>0.9970</td>\n",
       "      <td>3.26</td>\n",
       "      <td>0.65</td>\n",
       "      <td>9.8</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>11.2</td>\n",
       "      <td>0.28</td>\n",
       "      <td>0.56</td>\n",
       "      <td>1.9</td>\n",
       "      <td>0.075</td>\n",
       "      <td>17.0</td>\n",
       "      <td>60.0</td>\n",
       "      <td>0.9980</td>\n",
       "      <td>3.16</td>\n",
       "      <td>0.58</td>\n",
       "      <td>9.8</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>7.4</td>\n",
       "      <td>0.70</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.9</td>\n",
       "      <td>0.076</td>\n",
       "      <td>11.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>0.9978</td>\n",
       "      <td>3.51</td>\n",
       "      <td>0.56</td>\n",
       "      <td>9.4</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   fixed acidity  volatile acidity  citric acid  residual sugar  chlorides  \\\n",
       "0            7.4              0.70         0.00             1.9      0.076   \n",
       "1            7.8              0.88         0.00             2.6      0.098   \n",
       "2            7.8              0.76         0.04             2.3      0.092   \n",
       "3           11.2              0.28         0.56             1.9      0.075   \n",
       "4            7.4              0.70         0.00             1.9      0.076   \n",
       "\n",
       "   free sulfur dioxide  total sulfur dioxide  density    pH  sulphates  \\\n",
       "0                 11.0                  34.0   0.9978  3.51       0.56   \n",
       "1                 25.0                  67.0   0.9968  3.20       0.68   \n",
       "2                 15.0                  54.0   0.9970  3.26       0.65   \n",
       "3                 17.0                  60.0   0.9980  3.16       0.58   \n",
       "4                 11.0                  34.0   0.9978  3.51       0.56   \n",
       "\n",
       "   alcohol  quality  \n",
       "0      9.4        5  \n",
       "1      9.8        5  \n",
       "2      9.8        5  \n",
       "3      9.8        6  \n",
       "4      9.4        5  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "red_wine.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'quality score')"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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S2P06NGccEL0/YqIiIhI7RXXi/ncvcTduwLNgDPMrGOUOhPcPdPdM5s0aBS1n2bNmrFhw4bS7Y0bN5Kenl66vX37dlasWMH5559Py5YtWbBgAdnZ2XvdDtvdGTlyJEOHDiUnJ4ecnByuu+46xowZc/AOWEREREQOGzWy6oW7FwCzgV7707579+6sWbOGdevWsWvXLqZOnUp2dnbp68cccwxbtmxh/fr1rF+/np49ezJ9+nQyMzNL6+Tm5nLppZfSuHFjIpEIKSkppKSkEIlEDvDoRERERORwFLepF2Z2PFDk7gVmdgRwEfDA/vSVmprKo48+SlZWFiUlJdx000106NCBYcOGkZmZuVfSHE0kEiE3N5eZM2cCMGjQIPr06UPdunWZMmXK/oQkIiIiIoc5i9dawmbWGcgF6hCMXE9z9+GVtel8Yjt/5YaJe5XphiMiIiIicjCZ2WJ3z6yqXtxGlN19GXB6vPoXEREREYmnpLqFdd2TGmoEWURERESSwiFzC2sRERERkZqkRFlEREREJAolyiIiIiIiUShRFhERERGJQomyiIiIiEgUSpRFRERERKJQoiwiIiIiEoUSZRERERGRKJQoi4iIiIhEoURZRERERCQKJcoiIiIiIlGkJjqAsj77aC2j+/ZOdBj75c5/vJToEERERETkINKI8kG0Y8cOzjjjDLp06UKHDh24995796nz+OOP06lTJ7p27co555zDypUrAZg3bx6dO3eme/furF27FoCCggKysrJw9xo9DhERERGpgUTZzOqY2RIzO+yHXOvVq8esWbNYunQp+fn5zJgxgwULFuxV59prr2X58uXk5+czePBgBg0aBMDo0aN57rnn+N3vfse4ceMAGDFiBL/5zW8wsxo/FhEREZHariZGlG8HVtXAfhLOzGjYsCEARUVFFBUV7ZPkHn300aXPv/nmm9LX09LSKCwsJBKJkJaWxocffsimTZs477zzau4ARERERKRUXOcom1kz4FLgfmBQPPeVLEpKSsjIyGDt2rUMHDiQHj167FNn7Nix/PGPf2TXrl3MmjULgHvuuYcBAwZwxBFHMHnyZO666y5GjBhR0+GLiIiISCjeI8oPA4OB3XHeT9KoU6cO+fn5bNy4kUWLFrFixYp96gwcOJAPP/yQBx54gJEjRwLQtWtXFixYwFtvvcVHH31Eeno67k7fvn257rrr+Oyzz2r6UERERERqtbglymbWG/jc3RdXUW+AmeWZWd43O3fFK5wa16hRI84//3xmzJhRYZ2rr76a559/fq8yd2fkyJEMHTqUnJwccnJyuO666xgzZky8QxYRERGRMuI5onw2kG1m64GpwIVm9vfyldx9grtnunvmkfXqxjGc+Pviiy8oKCgAoLCwkDfeeIN27drtVWfNmjWlz19++WXatGmz1+u5ublceumlNG7cmEgkQkpKCikpKUQikfgfgIiIiIiUitscZXe/B7gHwMzOB+5y9+vitb9k8Mknn3DDDTdQUlLC7t27ueqqq+jduzfDhg0jMzOT7OxsHn30Ud544w3S0tJo3Lgxubm5pe0jkQi5ubnMnDkTgEGDBtGnTx/q1q3LlClTEnVYIiIiIrWS1cQavWUS5UrvJtK8SSO/4+Jz4h5PPOiGIyIiIiKHBjNb7O6ZVdWrkTvzuftsYHZN7EtERERE5GBIqltYn9CqtUZmRURERCQp6BbWIiIiIiJRKFEWEREREYlCibKIiIiISBRKlEVEREREolCiLCIiIiIShRJlEREREZEolCiLiIiIiEShRFlEREREJAolyiIiIiIiUShRFhERERGJospE2cy+a2ZvmtmKcLuzmf02/qGJiIiIiCROagx1JgJ3A+MB3H2ZmT0NjDzYwXz+n+2MvW3Wwe5WRERkvwx8/MJEhyAiCRTL1IsG7r6oXFlxPIIRERFJNhs2bOCCCy6gffv2dOjQgUceeQSApUuXcuaZZ9KpUyd+9KMfsW3btn3arl69mq5du5Y+jj76aB5++GEAfvWrX9G5c2f69+9fWn/y5Mml/YtI4sWSKG8xs1MBBzCz/wE+iaVzM1tvZsvNLN/M8g4gThERkYRITU1l9OjRrFq1igULFjB27FhWrlzJLbfcwqhRo1i+fDmXX345Dz300D5t27ZtS35+Pvn5+SxevJgGDRpw+eWX89VXX/HOO++wbNkySkpKWL58OYWFhUyaNImf/vSnCThKEYkmlkR5IMG0i3Zmtgm4A7itGvu4wN27unvm/gQoIiKSSCeeeCLdunUD4KijjqJ9+/Zs2rSJ1atXc+655wJw8cUX89xzz1Xaz5tvvsmpp57KySefTEpKCrt27cLdKSwsJC0tjYceeohf/OIXpKWlxf2YRCQ2lSbKZpYCZLr7RcDxQDt3P8fd/1Mj0YmIiCSR9evXs2TJEnr06EHHjh2ZPn06AM888wwbNmyotO3UqVO55pprgCDh7tOnD6effjqnnHIKxxxzDO+++y6XXXZZ3I9BRGJXaaLs7ruBn4XPv3H37dXs34GZZrbYzAbsZ4wiIiIJ9/XXX9OnTx8efvhhjj76aJ588knGjh1LRkYG27dvp27duhW23bVrF9OnT+fKK68sLRs8eDD5+fmMHj2aoUOHMnz4cJ544gmuuuoqRo486NfLi8h+iGXqxetmdpeZNTezJnseMfZ/trt3A34ADDSzc8tXMLMBZpZnZnlf7yioTuwiIiI1oqioiD59+tCvXz+uuOIKANq1a8fMmTNZvHgx11xzDaeeemqF7V999VW6devGCSecsM9rS5YsAeC73/0uf/vb35g2bRorVqxgzZo18TkYEYlZLMvD3RT+HFimzIFWVTV0983hz8/N7J/AGcDccnUmABMAWhzf1mOIR0REpMa4OzfffDPt27dn0KBBpeWff/45TZs2Zffu3YwcOZLbbqv48p0pU6aUTrsob+jQoUyYMIGioiJKSkoASElJIRKJHNwDEZFqq3JE2d1PifKoMkk2syPN7Kg9z4FLgBUHHrKIiEjNmTdvHpMnT2bWrFmly7y98sorTJkyhe9+97u0a9eO9PR0brzxRgA2b97MD3/4w9L2kUiE119/vXQkuqznn3+e7t27k56eTqNGjUqXmzMzunTpUmPHKCLRmXvlg7hmlgb8P2DPtInZwHh3L6qiXSvgn+FmKvC0u99fWZsWx7f1X/UZF0PYIiIi8acbjogcnsxscSwrssUy9WIckAY8Fm5fH5bdUlkjd/8I0L/DIiIiInJIiiVR7u7uZRPeWWa2NF4BiYiIiIgkg1gS5RIzO9XdP4TSKRUl8Qim6clH6WsuEREREUkKsSTKdwNvmdlHgAEnAzfGNSoRERERkQSrMlF29zfNrA3QliBRft/dd8Y9MhERERGRBKpyeTgzGwgc4e7L3H0p0MDMfhr/0EREREREEieWO/Pd6u6lt8xz963ArfELSUREREQk8WJJlFPMzPZsmFkdoOIb2ouIiIiIHAZiuZjvNWCamT1OcOvq24AZcY1KRERERCTBYkmUfwUMILg7nwEzgSfiGZSIiIiISKLFsurFbuBx4HEzawI0c/e4rKMsIiIiIpIsYln1YraZHR0myfnAX83sj/EPTUREREQkcWK5mO8Yd98GXAH81d0zgIviG5aIiIiISGLFMkc51cxOBK4ChsQzmB0r3mNVu/bx3IWIiIiIJFj791clOoSYxDKiPJxg5Yu17v6umbUC1sQ3LBERERGRxKoyUXb3Z9y9s7v/NNz+yN37xD80ERERETnclZSUcPrpp9O7d++9yn/+85/TsGHDqG127drFjTfeSKdOnejSpQuzZ88GYOfOnfTq1YuOHTvy2GOPldYfMGAAS5YsqXZssYwo7zcza2Rmz5rZ+2a2yszOjOf+REREROTQ8sgjj9C+/d5Tb/Py8igoKKigBUycOBGA5cuX8/rrr3PnnXeye/duXnvtNTIyMli2bBkTJkwAYOnSpezevZvTTz+92rHFNVEGHgFmuHs7oAtwaExIEREREZG427hxIy+//DK33HJLaVlJSQl33303Dz74YIXtVq5cyfe//30AmjZtSqNGjcjLyyMtLY3CwkKKi4tL6w4dOpThw4fvV3yxLA9XZ386NrOjgXOBvwC4+y53r/hfAxERERGpVe644w4efPBBUlK+TUkfffRRsrOzOfHEEyts16VLF1544QWKi4tZt24dixcvZsOGDVx88cV8+umn9OjRg8GDBzN9+nQyMjJIT0/fr/hiWfVirZk9S7A03Mpq9N0K+IJg3eUuwGLgdnf/pmwlMxtAcOc/TkyNJRwREREROdS99NJLNG3alIyMjNI5xps3b+aZZ54p3a7ITTfdxKpVq8jMzOTkk0/mrLPOIjU1ldTUVJ5++mkAioqKyMrKYvr06QwaNIiPP/6Y/v37k52dHXOM5u6VVzA7CrgauJFgBPpJYGq4tnJl7TKBBcDZ7r7QzB4Btrn70IradKx/hD/TsmXMwYuIiIjIoaf9+6u45557mDx5MqmpqezYsYNt27ZRr1496tWrR/369QH4+OOPadWqFWvXrq20v7POOosnnniC0047rbTskUceoVGjRqSnp/Pmm29y//33c+aZZ7Jo0SLMbLG7Z1YVZyyrXmx394nufhYwGLgX+MTMcs2sdSVNNwIb3X1huP0s0K2q/YmIiIjI4e/3v/89GzduZP369UydOpULL7yQrVu38umnn7J+/XrWr19PgwYNoibJkUiEb74JJim8/vrrpKam7pUkb926lZdeeon+/fsTiURISUnBzNixY0e1YoxpjrKZZZvZPwkuzhtNMK3iReCVitq5+6fABjNrGxZ9H6jO1A0REREREQCmT5/OsGHDAPj888/p1q0b7du354EHHmDy5Ml71R0+fDi//e1vMTOysrLIy8ujU6dO3HrrrdXaZyxTLz4C3gL+4u7vlHttjLv/opK2XYEngLrAR8CN7r61ovqaeiEiIiJy+Ev0nflinXoRy9Vz/d39X+U6P9vd51WWJAO4ez5QZRAiIiIiIskmlkR5DPvOLf5zlLIDVr9jB9rn5R3sbkVEREREqq3CRDm8i95ZwPFmNqjMS0cD+7W2soiIiIjIoaKyEeW6QMOwzlFlyrcB/xPPoEREREREEq3CRNnd5wBzzGySu/+nBmMSEREREUm4yqZePOzudwCPmtk+S2O4e+y3NREREREROcRUNvViz4J0f6iJQEREREREkkllUy8Whz/n1Fw4IiIiIiLJobKpF8uBCu9G4u6d4xKRiIiIiEgSqGzqRe8ai0JEREREJMlUNvVCK12IiIiISK2VUlUFM+tpZu+a2ddmtsvMSsxsW00EJyIiIiKSKFUmysCjwDXAGuAI4BaCW1iLiIiIiBy2KpujXMrd15pZHXcvAf5qZu/EI5j3/vsenXI7xaNrEUliy29YnugQRERE9hHLiHLEzOoC+Wb2oJn9EjgyznGJSC1z00030bRpUzp27Fhalp+fT8+ePenatSuZmZksWrQoatvc3FzatGlDmzZtyM3NBWDnzp306tWLjh078thjj5XWHTBgAEuWLInvwYiIyGEhlkT5eqAO8DPgG6A50KeqRmbW1szyyzy2mdkdBxauiByufvKTnzBjxoy9ygYPHsy9995Lfn4+w4cPZ/Dgwfu0+/LLL8nJyWHhwoUsWrSInJwctm7dymuvvUZGRgbLli1jwoQJACxdupTdu3dz+umn18gxiYjIoa3KqRdlVr8oBHJi7djdVwNdAcysDrAJ+Od+xCgitcC5557L+vXr9yozM7ZtC64d/uqrr0hPT9+n3WuvvcbFF19MkyZNALj44ouZMWMGjRo1orCwkOLi4tK6Q4cO5fHHH4/fQYiIyGGlykTZzNYR5cYj7t6qGvv5PvChlpwTkep4+OGHycrK4q677mL37t28886+l0ds2rSJ5s2bl243a9aMTZs2ceWVVzJ58mR69OjB4MGDmT59OhkZGVGTbRERkWhiuZgvs8zz+sCVQJNq7udqYEo124hILTdu3Dj+9Kc/0adPH6ZNm8bNN9/MG2+8sVcd931vIGpmpKam8vTTTwNQVFREVlYW06dPZ9CgQXz88cf079+f7OzsGjkOERE5NFU5R9nd/1vmscndHwYujHUH4YWA2cAzFbw+wMzyzCyvZHtJzIGLyOEvNzeXK664AoArr7wy6sV8zZo1Y8OGDaXbGzdu3GfU+LHHHuOGG25g/vz51K1bl3/84x+MHDkyvsGLiMghL5YbjnQr88g0s9uAo6qxjx8A/3b3z6K96O4T3D3T3TPrHFWnGt2KyOEuPT2dOXPmADBr1izatGmzT52srCxmzpzJ1q1b2bp1KzNnziQrK6v09a1bt/LSSy/Rv39/IpEIKSkpmBk7duyoseMQEZFDUyxTL0aXeV4MrAeuqsY+rkHTLkSkCtdccw2zZ89my5YtNGvWjJycHCZOnMjtt99OcXEx9evXL129Ii8vj8cff5wnnniCJk2aMHToULp37w7AsGHDSi/sAxg+fDi//e1vMTOysrIYO3YsnTp14rbbbkvIcYqIyKHDos3vO2idmzUANgCt3P2rquofccoR3vq+1nGLR0SSk244IiIiNcnMFrt7ZlX1Yln1YlBlr7v7Hyt5LQIcW9U+RERERESSTayrXnQHpofbPwLmEowUH1Qdju1A3g15B7tbEREREZFqiyVRPg7o5u7bAczsPuAZd78lnoGJiIiIiCRSLLewbgHsKrO9C2gZl2hERERERJJELCPKk4FFZvZPgjv0XQ7kxjUqEREREZEEqzJRdvf7zexV4Hth0Y3uviS+YYmIiIiIJFYsI8q4+7+Bf8c5FhERERGRpBHLHGURERERkVpHibKIiIiISBRKlEVEREREolCiLCIiIiIShRJlEREREZEolCiLiIiIiEQR0/JwNWbzErjvmERHceDu+yrREYiIiIjIAdKIcpzs2LGDM844gy5dutChQwfuvffeqPWmTZvGaaedRocOHbj22msBWL16NRkZGXTp0oX58+cDUFxczEUXXUQkEqmxYxARERGpzeI6omxmvwRuIbj19XKCu/rtiOc+k0W9evWYNWsWDRs2pKioiHPOOYcf/OAH9OzZs7TOmjVr+P3vf8+8efNo3Lgxn3/+OQDjx49n1KhRtGzZkl//+tc899xzjBs3juuvv54GDRok6pBEREREapW4jSib2UnAL4BM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\n",
      "text/plain": [
       "<Figure size 864x216 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = white_wine.quality.value_counts().sort_index(\n",
    "    ascending=False\n",
    ").plot.barh(title='White Wine Quality Scores', figsize=(12, 3))\n",
    "for bar in ax.patches:\n",
    "    ax.text(\n",
    "        bar.get_width(), \n",
    "        bar.get_y() + bar.get_height()/4, \n",
    "        f'{bar.get_width()/white_wine.shape[0]:.1%}'\n",
    "    )\n",
    "plt.xlabel('count of wines')\n",
    "plt.ylabel('quality score')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'quality score')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x216 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = red_wine.quality.value_counts().sort_index(\n",
    "    ascending=False\n",
    ").plot.barh(title='Red Wine Quality Scores', figsize=(12, 3))\n",
    "for bar in ax.patches:\n",
    "    ax.text(\n",
    "        bar.get_width(), \n",
    "        bar.get_y() + bar.get_height()/4, \n",
    "        f'{bar.get_width()/red_wine.shape[0]:.1%}'\n",
    "    )\n",
    "plt.xlabel('count of wines')\n",
    "plt.ylabel('quality score')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>fixed acidity</th>\n",
       "      <th>volatile acidity</th>\n",
       "      <th>citric acid</th>\n",
       "      <th>residual sugar</th>\n",
       "      <th>chlorides</th>\n",
       "      <th>free sulfur dioxide</th>\n",
       "      <th>total sulfur dioxide</th>\n",
       "      <th>density</th>\n",
       "      <th>pH</th>\n",
       "      <th>sulphates</th>\n",
       "      <th>alcohol</th>\n",
       "      <th>quality</th>\n",
       "      <th>kind</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>848</th>\n",
       "      <td>6.4</td>\n",
       "      <td>0.64</td>\n",
       "      <td>0.21</td>\n",
       "      <td>1.8</td>\n",
       "      <td>0.081</td>\n",
       "      <td>14.0</td>\n",
       "      <td>31.0</td>\n",
       "      <td>0.99689</td>\n",
       "      <td>3.59</td>\n",
       "      <td>0.66</td>\n",
       "      <td>9.8</td>\n",
       "      <td>5</td>\n",
       "      <td>red</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2529</th>\n",
       "      <td>6.6</td>\n",
       "      <td>0.42</td>\n",
       "      <td>0.13</td>\n",
       "      <td>12.8</td>\n",
       "      <td>0.044</td>\n",
       "      <td>26.0</td>\n",
       "      <td>158.0</td>\n",
       "      <td>0.99772</td>\n",
       "      <td>3.24</td>\n",
       "      <td>0.47</td>\n",
       "      <td>9.0</td>\n",
       "      <td>5</td>\n",
       "      <td>white</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>131</th>\n",
       "      <td>5.6</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.09</td>\n",
       "      <td>2.3</td>\n",
       "      <td>0.049</td>\n",
       "      <td>17.0</td>\n",
       "      <td>99.0</td>\n",
       "      <td>0.99370</td>\n",
       "      <td>3.63</td>\n",
       "      <td>0.63</td>\n",
       "      <td>13.0</td>\n",
       "      <td>5</td>\n",
       "      <td>red</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>244</th>\n",
       "      <td>15.0</td>\n",
       "      <td>0.21</td>\n",
       "      <td>0.44</td>\n",
       "      <td>2.2</td>\n",
       "      <td>0.075</td>\n",
       "      <td>10.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>1.00005</td>\n",
       "      <td>3.07</td>\n",
       "      <td>0.84</td>\n",
       "      <td>9.2</td>\n",
       "      <td>7</td>\n",
       "      <td>red</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1551</th>\n",
       "      <td>6.6</td>\n",
       "      <td>0.19</td>\n",
       "      <td>0.99</td>\n",
       "      <td>1.2</td>\n",
       "      <td>0.122</td>\n",
       "      <td>45.0</td>\n",
       "      <td>129.0</td>\n",
       "      <td>0.99360</td>\n",
       "      <td>3.09</td>\n",
       "      <td>0.31</td>\n",
       "      <td>8.7</td>\n",
       "      <td>6</td>\n",
       "      <td>white</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      fixed acidity  volatile acidity  citric acid  residual sugar  chlorides  \\\n",
       "848             6.4              0.64         0.21             1.8      0.081   \n",
       "2529            6.6              0.42         0.13            12.8      0.044   \n",
       "131             5.6              0.50         0.09             2.3      0.049   \n",
       "244            15.0              0.21         0.44             2.2      0.075   \n",
       "1551            6.6              0.19         0.99             1.2      0.122   \n",
       "\n",
       "      free sulfur dioxide  total sulfur dioxide  density    pH  sulphates  \\\n",
       "848                  14.0                  31.0  0.99689  3.59       0.66   \n",
       "2529                 26.0                 158.0  0.99772  3.24       0.47   \n",
       "131                  17.0                  99.0  0.99370  3.63       0.63   \n",
       "244                  10.0                  24.0  1.00005  3.07       0.84   \n",
       "1551                 45.0                 129.0  0.99360  3.09       0.31   \n",
       "\n",
       "      alcohol  quality   kind  \n",
       "848       9.8        5    red  \n",
       "2529      9.0        5  white  \n",
       "131      13.0        5    red  \n",
       "244       9.2        7    red  \n",
       "1551      8.7        6  white  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "wine = pd.concat([white_wine.assign(kind='white'), red_wine.assign(kind='red')])\n",
    "wine.sample(5, random_state=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 6497 entries, 0 to 1598\n",
      "Data columns (total 13 columns):\n",
      "fixed acidity           6497 non-null float64\n",
      "volatile acidity        6497 non-null float64\n",
      "citric acid             6497 non-null float64\n",
      "residual sugar          6497 non-null float64\n",
      "chlorides               6497 non-null float64\n",
      "free sulfur dioxide     6497 non-null float64\n",
      "total sulfur dioxide    6497 non-null float64\n",
      "density                 6497 non-null float64\n",
      "pH                      6497 non-null float64\n",
      "sulphates               6497 non-null float64\n",
      "alcohol                 6497 non-null float64\n",
      "quality                 6497 non-null int64\n",
      "kind                    6497 non-null object\n",
      "dtypes: float64(11), int64(1), object(1)\n",
      "memory usage: 685.2+ KB\n"
     ]
    }
   ],
   "source": [
    "wine.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>fixed acidity</th>\n",
       "      <th>volatile acidity</th>\n",
       "      <th>citric acid</th>\n",
       "      <th>residual sugar</th>\n",
       "      <th>chlorides</th>\n",
       "      <th>free sulfur dioxide</th>\n",
       "      <th>total sulfur dioxide</th>\n",
       "      <th>density</th>\n",
       "      <th>pH</th>\n",
       "      <th>sulphates</th>\n",
       "      <th>alcohol</th>\n",
       "      <th>quality</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>6497.000000</td>\n",
       "      <td>6497.000000</td>\n",
       "      <td>6497.000000</td>\n",
       "      <td>6497.000000</td>\n",
       "      <td>6497.000000</td>\n",
       "      <td>6497.000000</td>\n",
       "      <td>6497.000000</td>\n",
       "      <td>6497.000000</td>\n",
       "      <td>6497.000000</td>\n",
       "      <td>6497.000000</td>\n",
       "      <td>6497.000000</td>\n",
       "      <td>6497.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>7.215307</td>\n",
       "      <td>0.339666</td>\n",
       "      <td>0.318633</td>\n",
       "      <td>5.443235</td>\n",
       "      <td>0.056034</td>\n",
       "      <td>30.525319</td>\n",
       "      <td>115.744574</td>\n",
       "      <td>0.994697</td>\n",
       "      <td>3.218501</td>\n",
       "      <td>0.531268</td>\n",
       "      <td>10.491801</td>\n",
       "      <td>5.818378</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.296434</td>\n",
       "      <td>0.164636</td>\n",
       "      <td>0.145318</td>\n",
       "      <td>4.757804</td>\n",
       "      <td>0.035034</td>\n",
       "      <td>17.749400</td>\n",
       "      <td>56.521855</td>\n",
       "      <td>0.002999</td>\n",
       "      <td>0.160787</td>\n",
       "      <td>0.148806</td>\n",
       "      <td>1.192712</td>\n",
       "      <td>0.873255</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>3.800000</td>\n",
       "      <td>0.080000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.600000</td>\n",
       "      <td>0.009000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>0.987110</td>\n",
       "      <td>2.720000</td>\n",
       "      <td>0.220000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>3.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>6.400000</td>\n",
       "      <td>0.230000</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>1.800000</td>\n",
       "      <td>0.038000</td>\n",
       "      <td>17.000000</td>\n",
       "      <td>77.000000</td>\n",
       "      <td>0.992340</td>\n",
       "      <td>3.110000</td>\n",
       "      <td>0.430000</td>\n",
       "      <td>9.500000</td>\n",
       "      <td>5.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>7.000000</td>\n",
       "      <td>0.290000</td>\n",
       "      <td>0.310000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>0.047000</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>118.000000</td>\n",
       "      <td>0.994890</td>\n",
       "      <td>3.210000</td>\n",
       "      <td>0.510000</td>\n",
       "      <td>10.300000</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>7.700000</td>\n",
       "      <td>0.400000</td>\n",
       "      <td>0.390000</td>\n",
       "      <td>8.100000</td>\n",
       "      <td>0.065000</td>\n",
       "      <td>41.000000</td>\n",
       "      <td>156.000000</td>\n",
       "      <td>0.996990</td>\n",
       "      <td>3.320000</td>\n",
       "      <td>0.600000</td>\n",
       "      <td>11.300000</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>15.900000</td>\n",
       "      <td>1.580000</td>\n",
       "      <td>1.660000</td>\n",
       "      <td>65.800000</td>\n",
       "      <td>0.611000</td>\n",
       "      <td>289.000000</td>\n",
       "      <td>440.000000</td>\n",
       "      <td>1.038980</td>\n",
       "      <td>4.010000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>14.900000</td>\n",
       "      <td>9.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       fixed acidity  volatile acidity  citric acid  residual sugar  \\\n",
       "count    6497.000000       6497.000000  6497.000000     6497.000000   \n",
       "mean        7.215307          0.339666     0.318633        5.443235   \n",
       "std         1.296434          0.164636     0.145318        4.757804   \n",
       "min         3.800000          0.080000     0.000000        0.600000   \n",
       "25%         6.400000          0.230000     0.250000        1.800000   \n",
       "50%         7.000000          0.290000     0.310000        3.000000   \n",
       "75%         7.700000          0.400000     0.390000        8.100000   \n",
       "max        15.900000          1.580000     1.660000       65.800000   \n",
       "\n",
       "         chlorides  free sulfur dioxide  total sulfur dioxide      density  \\\n",
       "count  6497.000000          6497.000000           6497.000000  6497.000000   \n",
       "mean      0.056034            30.525319            115.744574     0.994697   \n",
       "std       0.035034            17.749400             56.521855     0.002999   \n",
       "min       0.009000             1.000000              6.000000     0.987110   \n",
       "25%       0.038000            17.000000             77.000000     0.992340   \n",
       "50%       0.047000            29.000000            118.000000     0.994890   \n",
       "75%       0.065000            41.000000            156.000000     0.996990   \n",
       "max       0.611000           289.000000            440.000000     1.038980   \n",
       "\n",
       "                pH    sulphates      alcohol      quality  \n",
       "count  6497.000000  6497.000000  6497.000000  6497.000000  \n",
       "mean      3.218501     0.531268    10.491801     5.818378  \n",
       "std       0.160787     0.148806     1.192712     0.873255  \n",
       "min       2.720000     0.220000     8.000000     3.000000  \n",
       "25%       3.110000     0.430000     9.500000     5.000000  \n",
       "50%       3.210000     0.510000    10.300000     6.000000  \n",
       "75%       3.320000     0.600000    11.300000     6.000000  \n",
       "max       4.010000     2.000000    14.900000     9.000000  "
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "wine.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "white    4898\n",
       "red      1599\n",
       "Name: kind, dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "wine.kind.value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train test split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "wine_y = wine.pop('quality')\n",
    "wine_X = wine\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    wine_X, wine_y, test_size=0.25, random_state=0, stratify=wine_y\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>fixed acidity</th>\n",
       "      <th>volatile acidity</th>\n",
       "      <th>citric acid</th>\n",
       "      <th>residual sugar</th>\n",
       "      <th>chlorides</th>\n",
       "      <th>free sulfur dioxide</th>\n",
       "      <th>total sulfur dioxide</th>\n",
       "      <th>density</th>\n",
       "      <th>pH</th>\n",
       "      <th>sulphates</th>\n",
       "      <th>alcohol</th>\n",
       "      <th>kind</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>987</th>\n",
       "      <td>7.1</td>\n",
       "      <td>0.36</td>\n",
       "      <td>0.30</td>\n",
       "      <td>1.6</td>\n",
       "      <td>0.080</td>\n",
       "      <td>35.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>0.99693</td>\n",
       "      <td>3.44</td>\n",
       "      <td>0.50</td>\n",
       "      <td>9.4</td>\n",
       "      <td>red</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1219</th>\n",
       "      <td>8.2</td>\n",
       "      <td>0.37</td>\n",
       "      <td>0.36</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.034</td>\n",
       "      <td>17.0</td>\n",
       "      <td>93.0</td>\n",
       "      <td>0.99060</td>\n",
       "      <td>3.04</td>\n",
       "      <td>0.32</td>\n",
       "      <td>11.7</td>\n",
       "      <td>white</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2380</th>\n",
       "      <td>6.4</td>\n",
       "      <td>0.27</td>\n",
       "      <td>0.19</td>\n",
       "      <td>1.9</td>\n",
       "      <td>0.085</td>\n",
       "      <td>21.0</td>\n",
       "      <td>196.0</td>\n",
       "      <td>0.99516</td>\n",
       "      <td>3.49</td>\n",
       "      <td>0.64</td>\n",
       "      <td>9.5</td>\n",
       "      <td>white</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2770</th>\n",
       "      <td>6.4</td>\n",
       "      <td>0.44</td>\n",
       "      <td>0.44</td>\n",
       "      <td>14.4</td>\n",
       "      <td>0.048</td>\n",
       "      <td>29.0</td>\n",
       "      <td>228.0</td>\n",
       "      <td>0.99955</td>\n",
       "      <td>3.26</td>\n",
       "      <td>0.54</td>\n",
       "      <td>8.8</td>\n",
       "      <td>white</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>857</th>\n",
       "      <td>8.2</td>\n",
       "      <td>0.40</td>\n",
       "      <td>0.48</td>\n",
       "      <td>13.7</td>\n",
       "      <td>0.042</td>\n",
       "      <td>59.0</td>\n",
       "      <td>169.0</td>\n",
       "      <td>0.99860</td>\n",
       "      <td>3.10</td>\n",
       "      <td>0.52</td>\n",
       "      <td>9.4</td>\n",
       "      <td>white</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      fixed acidity  volatile acidity  citric acid  residual sugar  chlorides  \\\n",
       "987             7.1              0.36         0.30             1.6      0.080   \n",
       "1219            8.2              0.37         0.36             1.0      0.034   \n",
       "2380            6.4              0.27         0.19             1.9      0.085   \n",
       "2770            6.4              0.44         0.44            14.4      0.048   \n",
       "857             8.2              0.40         0.48            13.7      0.042   \n",
       "\n",
       "      free sulfur dioxide  total sulfur dioxide  density    pH  sulphates  \\\n",
       "987                  35.0                  70.0  0.99693  3.44       0.50   \n",
       "1219                 17.0                  93.0  0.99060  3.04       0.32   \n",
       "2380                 21.0                 196.0  0.99516  3.49       0.64   \n",
       "2770                 29.0                 228.0  0.99955  3.26       0.54   \n",
       "857                  59.0                 169.0  0.99860  3.10       0.52   \n",
       "\n",
       "      alcohol   kind  \n",
       "987       9.4    red  \n",
       "1219     11.7  white  \n",
       "2380      9.5  white  \n",
       "2770      8.8  white  \n",
       "857       9.4  white  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.sample(5, random_state=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Build model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%capture\n",
    "from sklearn.compose import ColumnTransformer\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n",
    "\n",
    "pipeline = Pipeline([\n",
    "    ('transformer', ColumnTransformer([\n",
    "        ('scale', StandardScaler(), slice(0, -1)),\n",
    "        ('encode', OneHotEncoder(sparse=False), [-1])\n",
    "    ])),\n",
    "    ('rf', RandomForestClassifier(n_estimators=100, random_state=0))\n",
    "])\n",
    "\n",
    "search_space = {\n",
    "    'rf__max_depth' : np.arange(5, 20, 5)\n",
    "}\n",
    "\n",
    "grid = GridSearchCV(pipeline, search_space, scoring='f1_macro', cv=5).fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'rf__max_depth': 15}"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid.best_params_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Examine feature importances"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>importance</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>feature</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>alcohol</th>\n",
       "      <td>0.125440</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>density</th>\n",
       "      <td>0.100587</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>volatile acidity</th>\n",
       "      <td>0.099833</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>total sulfur dioxide</th>\n",
       "      <td>0.090152</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>residual sugar</th>\n",
       "      <td>0.086436</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sulphates</th>\n",
       "      <td>0.086286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>chlorides</th>\n",
       "      <td>0.085464</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>pH</th>\n",
       "      <td>0.084583</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>free sulfur dioxide</th>\n",
       "      <td>0.082274</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>citric acid</th>\n",
       "      <td>0.078675</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>fixed acidity</th>\n",
       "      <td>0.074185</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>x0_red</th>\n",
       "      <td>0.003385</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>x0_white</th>\n",
       "      <td>0.002702</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      importance\n",
       "feature                         \n",
       "alcohol                 0.125440\n",
       "density                 0.100587\n",
       "volatile acidity        0.099833\n",
       "total sulfur dioxide    0.090152\n",
       "residual sugar          0.086436\n",
       "sulphates               0.086286\n",
       "chlorides               0.085464\n",
       "pH                      0.084583\n",
       "free sulfur dioxide     0.082274\n",
       "citric acid             0.078675\n",
       "fixed acidity           0.074185\n",
       "x0_red                  0.003385\n",
       "x0_white                0.002702"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoded_labels = grid.best_estimator_.named_steps['transformer'].named_transformers_['encode'].get_feature_names()\n",
    "pd.DataFrame({\n",
    "    'feature' : np.concatenate([X_train.columns.values[:-1], encoded_labels]), \n",
    "    'importance' : grid.best_estimator_.named_steps['rf'].feature_importances_\n",
    "}).set_index('feature').sort_values('importance', ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Evaluate model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "preds = grid.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           3       0.00      0.00      0.00         8\n",
      "           4       0.80      0.07      0.14        54\n",
      "           5       0.70      0.70      0.70       535\n",
      "           6       0.63      0.76      0.69       709\n",
      "           7       0.70      0.52      0.59       270\n",
      "           8       0.89      0.33      0.48        48\n",
      "           9       0.00      0.00      0.00         1\n",
      "\n",
      "   micro avg       0.66      0.66      0.66      1625\n",
      "   macro avg       0.53      0.34      0.37      1625\n",
      "weighted avg       0.67      0.66      0.65      1625\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\users\\molinstefanie\\packt\\venv\\lib\\site-packages\\sklearn\\metrics\\classification.py:1143: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "c:\\users\\molinstefanie\\packt\\venv\\lib\\site-packages\\sklearn\\metrics\\classification.py:1143: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "c:\\users\\molinstefanie\\packt\\venv\\lib\\site-packages\\sklearn\\metrics\\classification.py:1143: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report\n",
    "print(classification_report(y_test, preds))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x159f7d0>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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b77h2LFj+Pn5ObQzNjaWTZs2ERUVxalTp3jkkUdISEggODiY2NhY3nzzTdq3d1wW7siRI4wbN47z58/Ts2dPPv74Y4JKdHcE2LFjB5MnT+bixYv4+fmRkJBASEjRg8aYMWM4fPiwV0qSuyoK92NMIcUAp4GVlm01jpDQMEIj6lkFYYrfOeu+uKvnevRa9sJO7ZGTX0DcL4cAeGR4OxqGe3e9X5kVxwEEGoSV/sLWdtasOco998QTGxvJ8uV3IiK0a9eQdu28m3egcc5XX31FREQESinGjh3L119/zbhx48ocYzabWbRoES1btmTNmjUMGTLE6XWUUtx4442MHz+eL74wOhNv27aN06dPlykK//jHP3j00UcZN24c9913H/Pnz+f++4vfSk0mE3feeScff/wx3bt3JyUlhcDAQOv+hQsXEh7uvUZLroqCSSlV9idbQ/lNjJosAxt4PpzQ1TyELxOOcepiDh2bRnB1pyYet6MUusSFXS5ezOXpp1cSF2ckTwYG+nPuXBbR0WE+tsw5sU/94JXzJs68tsz9hWWyRYRu3brx8ccfF9v//vvvM3fuXPLy8mjbti0ff/wxoaGhfP3118yYMQN/f3/q1avHmjVr2L17N3fffTd5eXmYzWa+/fZb2rUr3nwoIiICMG6seXl5Vo+6sOLqfffdV8rGX375hS5dunDrrbfy+eefuyQKv/zyC4GBgcXO16NHjzLHKKVYtWoVn332GQDjx49n+vTppURhxYoVdOvWje7djXyohg2LHjYyMjJ4/fXXmTt3LrfccotTO8uDqyGpCSKyVETGi0hdr1hSxYnrOtVj5yqMNCqk4769DgUhJ7+AuNUHAXh4WLvKSXrSkUelWLbsAF26xBEXt4mAAD+mTRvMli2TqoUg+Irdu3fz0ksvsWrVKrZv385bb71V6pibbrqJhIQEtm/fTseOHZk/3ygw+fzzz7N8+XK2b99OfHw8YNzYH374YbZt28amTZto0cJ+7bGRI0fSqFEj6tata+2jcN9999kVBDDqMd12223ceOONLFmyhPx85+tou3bt4vLLHVeStScQKSkpREZGEhBgPIu3aNGC48ePlzruzz//REQYOXIkPXv2ZNasWdZ9zz33HI8//jihoZ6twmyLq53X2ohIP2AcMENEtgFfKKW+8JplPsS20xoY/RI8hatTRoV88UcSpy/m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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from ml_utils.classification import plot_multi_class_roc\n",
    "\n",
    "plot_multi_class_roc(y_test, grid.predict_proba(X_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1628710>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from ml_utils.classification import confusion_matrix_visual\n",
    "\n",
    "confusion_matrix_visual(y_test, preds, np.sort(wine_y.unique()))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
